Pillow
Pillow
Pillow는 파이썬에서 이미지 처리를 위한 대표적인 라이브러리로, Python Imaging Library(PIL)의 유지 및 확장 버전입니다. 원래 PIL은 1990년대 후반에 개발되었으나 더 이상 유지 관리되지 않게 되었고, 이를 계승하여 활발히 개발되고 있는 오픈소스 프로젝트가 바로 Pillow입니다. 현재 많은 파이썬 기반 애플리케이션에서 이미지 로딩, 변환, 필터링, 저장 등의 작업에 널리 사용되고 있습니다.
개요
Pillow는 다양한 이미지 파일 형식을 지원하며, 간단한 이미지 조작부터 고급 이미지 처리까지 다양한 기능을 제공합니다. 웹 애플리케이션, 데이터 과학, 머신러닝 전처리, 자동화 스크립트 등에서 이미지 처리가 필요한 경우 자주 활용됩니다. 특히 NumPy와의 호환성 덕분에 딥러닝 프레임워크(예: TensorFlow, PyTorch)와의 통합도 용이합니다.
공식 GitHub 저장소와 문서는 활발히 업데이트되며, 파이썬 3.7 이상을 공식적으로 지원합니다.
주요 기능
이미지 파일 형식 지원
Pillow는 다음과 같은 주요 이미지 포맷을 읽고 쓸 수 있습니다:
참고: WebP와 같은 일부 포맷은 추가적인 디코더 라이브러리가 필요할 수 있습니다.
기본 이미지 조작
Pillow를 사용하면 다음과 같은 조작이 가능합니다:
- 이미지 리사이징 (크기 조정)
- 회전 및 뒤집기
- 자르기 (Cropping)
- 색상 변환 (RGB, Grayscale, HSV 등)
- 투명도 조정 (Alpha 채널)
- 이미지 병합 및 합성
예시 코드:
from PIL import Image
# 이미지 열기
img = Image.open("example.jpg")
# 회전 및 리사이징
rotated = img.rotate(45)
resized = img.resize((800, 600))
# 그레이스케일 변환
gray_img = img.convert("L")
# 저장
resized.save("resized_example.jpg")
필터 및 이펙트 적용
Pillow는 [ImageFilter](/doc/%EA%B8%B0%EC%88%A0/%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC/%ED%95%84%ED%84%B0%20%EB%B0%8F%20%EC%9D%B4%ED%8E%99%ED%8A%B8/ImageFilter) 모듈을 통해 다양한 필터를 제공합니다:
[BLUR](/doc/%EA%B8%B0%EC%88%A0/%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC/%ED%95%84%ED%84%B0%20%EB%B0%8F%20%EC%9D%B4%ED%8E%99%ED%8A%B8/BLUR): 흐림 효과[CONTOUR](/doc/%EA%B8%B0%EC%88%A0/%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC/%ED%95%84%ED%84%B0%20%EB%B0%8F%20%EC%9D%B4%ED%8E%99%ED%8A%B8/CONTOUR): 윤곽선 강조[SHARPEN](/doc/%EA%B8%B0%EC%88%A0/%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC/%ED%95%84%ED%84%B0%20%EB%B0%8F%20%EC%9D%B4%ED%8E%99%ED%8A%B8/SHARPEN): 선명도 강화[EMBOSS](/doc/%EA%B8%B0%EC%88%A0/%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC/%ED%95%84%ED%84%B0%20%EB%B0%8F%20%EC%9D%B4%ED%8E%99%ED%8A%B8/EMBOSS): 엠보싱 효과
from PIL import Image, ImageFilter
img = Image.open("example.jpg")
blurred = img.filter(ImageFilter.BLUR)
blurred.save("blurred.jpg")
고급 기능
텍스트와 도형 삽입
[ImageDraw](/doc/%EA%B8%B0%EC%88%A0/%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%B2%98%EB%A6%AC/%EC%9D%B4%EB%AF%B8%EC%A7%80%20%EC%A1%B0%EC%9E%91/ImageDraw) 모듈을 사용하면 이미지 위에 텍스트, 선, 사각형, 원 등을 그릴 수 있습니다.
from PIL import Image, ImageDraw, ImageFont
img = Image.new("RGB", (400, 200), color="white")
draw = ImageDraw.Draw(img)
# 텍스트 삽입
draw.text((50, 50), "Hello, Pillow!", fill="black")
# 사각형 그리기
draw.rectangle([(100, 100), (200, 150)], outline="red", width=3)
img.save("drawn_image.png")
NumPy 연동
이미지를 NumPy 배열로 변환하면, OpenCV나 머신러닝 모델과의 연동이 쉬워집니다.
import numpy as np
from PIL import Image
img = Image.open("example.jpg")
np_array = np.array(img) # RGB 배열로 변환
print(np_array.shape) # (높이, 너비, 채널)
반대로 NumPy 배열을 다시 이미지로 변환도 가능합니다:
new_img = Image.fromarray(np_array)
new_img.save("from_array.png")
설치 및 환경 설정
Pillow는 [pip](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4/%ED%8C%A8%ED%82%A4%EC%A7%80%20%EA%B4%80%EB%A6%AC/pip)를 통해 쉽게 설치할 수 있습니다:
pip install Pillow
가상 환경 사용을 권장합니다:
python -m venv pillow_env
source pillow_env/bin/activate # Linux/macOS
# 또는
pillow_env\Scripts\activate # Windows
pip install Pillow
주의사항 및 한계
- 성능 제한: Pillow는 단일 이미지 처리에는 우수하지만, 대규모 배치 처리 시에는 OpenCV나 GPU 기반 라이브러리(예: CuPy, DALI)가 더 효율적일 수 있습니다.
- 병렬 처리 미지원: 내장된 병렬 처리 기능이 없어, 다중 이미지 처리 시 별도의 멀티스레딩/멀티프로세싱이 필요합니다.
- 고급 컴퓨터 비전 기능 부족: 얼굴 인식, 객체 탐지 등은 OpenCV나 DNN 프레임워크와 연동해야 합니다.
관련 도구 및 라이브러리
| 도구 | 설명 |
|---|---|
| OpenCV (cv2) | 실시간 컴퓨터 비전에 최적화된 라이브러리. Pillow보다 성능이 뛰어나며, 고급 기능이 풍부함 |
| scikit-image | 과학적 이미지 분석에 특화된 라이브러리. Pillow보다 분석 기능이 강력함 |
| matplotlib | 이미지 시각화에 자주 사용되며, Pillow로 로드한 이미지를 쉽게 표시 가능 |
참고 자료
Pillow는 접근성이 뛰어나고 문서가 잘 정비되어 있어, 이미지 처리를 처음 시작하는 파이썬 사용자에게 이상적인 선택입니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.